import { contextBridge, ipcRenderer } from 'electron'

/**
 * RickPan Electron预加载脚本
 * 安全地暴露Electron API给渲染进程
 */

// 定义文件选择选项接口
interface FileSelectOptions {
  multiple?: boolean
  filters?: Array<{
    name: string
    extensions: string[]
  }>
}

// 定义通知选项接口
interface NotificationOptions {
  title: string
  body: string
  icon?: string
}

// 定义更新信息接口
interface UpdateInfo {
  version: string
  releaseDate: string
  releaseNotes?: string
}

// 定义暴露给渲染进程的API
const electronAPI = {
  // 文件系统操作
  file: {
    /**
     * 选择文件
     */
    select: (options?: FileSelectOptions): Promise<string[]> => 
      ipcRenderer.invoke('file:select', options),
    
    /**
     * 选择文件夹
     */
    selectFolder: (): Promise<string | null> => 
      ipcRenderer.invoke('file:selectFolder'),
    
    /**
     * 保存文件
     */
    save: (data: any, defaultPath?: string): Promise<string | null> => 
      ipcRenderer.invoke('file:save', data, defaultPath)
  },

  // 应用控制
  app: {
    /**
     * 最小化窗口
     */
    minimize: (): Promise<void> => 
      ipcRenderer.invoke('app:minimize'),
    
    /**
     * 最大化/还原窗口
     */
    maximize: (): Promise<void> => 
      ipcRenderer.invoke('app:maximize'),
    
    /**
     * 关闭窗口
     */
    close: (): Promise<void> => 
      ipcRenderer.invoke('app:close'),
    
    /**
     * 隐藏窗口
     */
    hide: (): Promise<void> => 
      ipcRenderer.invoke('app:hide'),
    
    /**
     * 显示窗口
     */
    show: (): Promise<void> =>
      ipcRenderer.invoke('app:show'),

    /**
     * 检查窗口是否最大化
     */
    isMaximized: (): Promise<boolean> =>
      ipcRenderer.invoke('app:isMaximized'),

    /**
     * 获取应用版本
     */
    getVersion: (): string => process.versions.electron
  },

  // 系统操作
  system: {
    /**
     * 打开外部链接
     */
    openExternal: (url: string): Promise<void> => 
      ipcRenderer.invoke('system:openExternal', url),
    
    /**
     * 在文件管理器中显示文件
     */
    showItemInFolder: (path: string): Promise<void> => 
      ipcRenderer.invoke('system:showItemInFolder', path),
    
    /**
     * 获取平台信息
     */
    getPlatform: (): string => process.platform,
    
    /**
     * 检查是否为开发环境
     */
    isDev: (): boolean => process.env.NODE_ENV === 'development'
  },

  // 通知系统
  notification: {
    /**
     * 显示系统通知
     */
    show: (options: NotificationOptions): Promise<void> => 
      ipcRenderer.invoke('notification:show', options),
    
    /**
     * 检查通知权限
     */
    checkPermission: (): string => 'granted' // Electron中默认有权限
  },

  // 设置管理
  settings: {
    /**
     * 获取所有设置
     */
    getAll: (): Promise<any> =>
      ipcRenderer.invoke('settings:get'),

    /**
     * 获取窗口设置
     */
    getWindow: (): Promise<any> =>
      ipcRenderer.invoke('settings:getWindow'),

    /**
     * 获取应用设置
     */
    getApp: (): Promise<any> =>
      ipcRenderer.invoke('settings:getApp'),

    /**
     * 获取文件管理设置
     */
    getFileManager: (): Promise<any> =>
      ipcRenderer.invoke('settings:getFileManager'),

    /**
     * 获取AI设置
     */
    getAI: (): Promise<any> =>
      ipcRenderer.invoke('settings:getAI'),

    /**
     * 更新窗口设置
     */
    updateWindow: (settings: any): Promise<void> =>
      ipcRenderer.invoke('settings:updateWindow', settings),

    /**
     * 更新应用设置
     */
    updateApp: (settings: any): Promise<void> =>
      ipcRenderer.invoke('settings:updateApp', settings),

    /**
     * 更新文件管理设置
     */
    updateFileManager: (settings: any): Promise<void> =>
      ipcRenderer.invoke('settings:updateFileManager', settings),

    /**
     * 更新AI设置
     */
    updateAI: (settings: any): Promise<void> =>
      ipcRenderer.invoke('settings:updateAI', settings),

    /**
     * 重置所有设置
     */
    reset: (): Promise<void> =>
      ipcRenderer.invoke('settings:reset'),

    /**
     * 导出设置
     */
    export: (): Promise<string> =>
      ipcRenderer.invoke('settings:export'),

    /**
     * 导入设置
     */
    import: (settingsJson: string): Promise<boolean> =>
      ipcRenderer.invoke('settings:import', settingsJson)
  },

  // 窗口控制
  window: {
    /**
     * 切换窗口置顶状态
     */
    toggleAlwaysOnTop: (): Promise<boolean> =>
      ipcRenderer.invoke('window:toggleAlwaysOnTop'),

    /**
     * 设置窗口置顶状态
     */
    setAlwaysOnTop: (alwaysOnTop: boolean): Promise<boolean> =>
      ipcRenderer.invoke('window:setAlwaysOnTop', alwaysOnTop)
  },

  // 自动更新
  updater: {
    /**
     * 检查更新
     */
    checkForUpdates: (): Promise<void> => 
      ipcRenderer.invoke('updater:check'),
    
    /**
     * 下载更新
     */
    downloadUpdate: (): Promise<void> => 
      ipcRenderer.invoke('updater:download'),
    
    /**
     * 安装更新并重启
     */
    installUpdate: (): Promise<void> => 
      ipcRenderer.invoke('updater:install'),
    
    /**
     * 监听更新可用事件
     */
    onUpdateAvailable: (callback: (info: UpdateInfo) => void) => {
      ipcRenderer.on('update-available', (_, info) => callback(info))
    },
    
    /**
     * 监听更新下载完成事件
     */
    onUpdateDownloaded: (callback: (info: UpdateInfo) => void) => {
      ipcRenderer.on('update-downloaded', (_, info) => callback(info))
    },
    
    /**
     * 移除更新事件监听
     */
    removeUpdateListeners: () => {
      ipcRenderer.removeAllListeners('update-available')
      ipcRenderer.removeAllListeners('update-downloaded')
    }
  },

  // 拖拽支持
  drag: {
    /**
     * 启用文件拖拽
     */
    enableFileDrop: (callback: (files: string[]) => void) => {
      // 阻止默认的拖拽行为
      document.addEventListener('dragover', (e) => {
        e.preventDefault()
        e.stopPropagation()
      })
      
      document.addEventListener('drop', (e) => {
        e.preventDefault()
        e.stopPropagation()
        
        const files = Array.from(e.dataTransfer?.files || [])
        const filePaths = files.map(file => (file as any).path || file.name)
        callback(filePaths)
      })
    }
  },

  // 剪贴板操作
  clipboard: {
    /**
     * 写入文本到剪贴板
     */
    writeText: (text: string): void => {
      navigator.clipboard.writeText(text)
    },
    
    /**
     * 从剪贴板读取文本
     */
    readText: (): Promise<string> => {
      return navigator.clipboard.readText()
    }
  },

  // 开发工具
  devTools: {
    /**
     * 打开开发者工具
     */
    open: (): void => {
      if (process.env.NODE_ENV === 'development') {
        ipcRenderer.send('dev-tools:open')
      }
    },
    
    /**
     * 关闭开发者工具
     */
    close: (): void => {
      if (process.env.NODE_ENV === 'development') {
        ipcRenderer.send('dev-tools:close')
      }
    }
  },

  // 环境信息
  env: {
    /**
     * 是否为Electron环境
     */
    isElectron: true,
    
    /**
     * 是否为开发环境
     */
    isDev: process.env.NODE_ENV === 'development',
    
    /**
     * 平台信息
     */
    platform: process.platform,
    
    /**
     * 架构信息
     */
    arch: process.arch,
    
    /**
     * Node.js版本
     */
    nodeVersion: process.versions.node,
    
    /**
     * Electron版本
     */
    electronVersion: process.versions.electron,
    
    /**
     * Chrome版本
     */
    chromeVersion: process.versions.chrome
  }
}

// 安全地暴露API到渲染进程
contextBridge.exposeInMainWorld('electronAPI', electronAPI)

// 为了兼容性，也暴露一个简化的API
contextBridge.exposeInMainWorld('isElectron', true)

// 暴露版本信息
contextBridge.exposeInMainWorld('versions', {
  node: process.versions.node,
  chrome: process.versions.chrome,
  electron: process.versions.electron
})

// TypeScript类型定义（供渲染进程使用）
export type ElectronAPI = typeof electronAPI

// 全局类型声明
declare global {
  interface Window {
    electronAPI: typeof electronAPI
    isElectron: boolean
    versions: {
      node: string
      chrome: string
      electron: string
    }
  }
}

// 预加载脚本加载完成日志
console.log('RickPan Electron preload script loaded successfully')
